package doublePointer;

import java.util.HashMap;

/**给你一个整数数组 nums 和一个整数 k 。

每一步操作中，你需要从数组中选出和为 k 的两个整数，并将它们移出数组。

返回你可以对数组执行的最大操作数。*/
public class KPairCount {
    public int maxOperations(int[] nums, int k) {
        HashMap<Integer, Integer> hashMap = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if (!hashMap.containsKey(nums[i])) {
                hashMap.put(nums[i], 1);
            } else {
                hashMap.put(nums[i], hashMap.get(nums[i]) + 1);
            }
        }
        int count = 0;
        for (int i = 0; i < nums.length; i++) {
            int need = k - nums[i];
            if (hashMap.containsKey(nums[i]) && hashMap.containsKey(need)) {
                if (hashMap.get(nums[i]) > 0 && hashMap.get(need) > 0) {
                    if(need == nums[i] && hashMap.get(need) < 2){
                        continue;
                    }
                    hashMap.put(nums[i], hashMap.get(nums[i]) - 1);
                    hashMap.put(need, hashMap.get(need) - 1);
                    count++;
                }
            }
        }
        return count;
    }

    public static void main(String[] args) {
        KPairCount solution = new KPairCount();
        int[] nums = {3,1,3,4,3};
        int k = 6;
        int result = solution.maxOperations(nums, k);
        System.out.println(result); // 输出最大操作数
    }
}
